/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.ws;

import edu.ucue.ptc.gco.mdl.Cliente;
import edu.ucue.ptc.gco.mdl.Direccion;
import edu.ucue.ptc.gco.ngc.ClienteManagerLocal;
import edu.ucue.ptc.gco.ngc.DireccionManagerLocal;
import edu.ucue.ptc.gco.ngc.UsuarioManagerLocal;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import edu.ucue.ptc.gco.util.ClienteValidadorException;
import edu.ucue.ptc.gco.util.DireccionValidadorException;
import java.util.List;
import javax.ejb.EJB;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.ejb.Stateless;

/**
 *
 * @author Xaferima
 */
@WebService(serviceName = "ClienteWebService")
@Stateless()
public class ClienteWebService {
    @EJB
    private ClienteManagerLocal ejbRef;
    @EJB
    private UsuarioManagerLocal ejbRefUsuario;
    @EJB
    private DireccionManagerLocal ejbRefDireccion;
    
    @WebMethod(operationName = "crearCliente")
    public void crearCliente(@WebParam(name = "cliente") Cliente cliente,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, ClienteValidadorException{
            ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
            ejbRef.crear(cliente);
    }

    @WebMethod(operationName = "crearClienteD")
    public void crearClienteD(@WebParam(name = "cliente") Cliente cliente,@WebParam(name = "Ldir") List<Direccion> Ldir, @WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException, ClienteValidadorException, DireccionValidadorException{
            ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
            ejbRef.crear(cliente);
            int cont=0;
            while (cont!=Ldir.size())
            {   
                Direccion dir=Ldir.get(cont);
                dir.setPersona(cliente);
                ejbRefDireccion.crear(dir, nombreUsuario, contrasenaUsuario);            
                cont++;
            }
    }
    
    @WebMethod(operationName = "modificarCliente")
    public void modificarCliente(@WebParam(name = "cliente") Cliente cliente ,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario)  throws AtributoInvalidoException, ClienteValidadorException{
            ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
            ejbRef.modificar(cliente,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "buscarPorCedulaCliente")
    public Cliente buscarPorCedulaCliente(@WebParam(name = "cedula") String cedula,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException {
                ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
                return ejbRef.buscarPorCedula(cedula,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "buscarPorIdCliente")
    public Cliente buscarPorIdCliente(@WebParam(name = "id") int id,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException {
                ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
            return ejbRef.buscarPorId(id,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "eliminarPorCedulaCliente")
    public void eliminarPorCedulaCliente(@WebParam(name = "cedula") String cedula,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException {
               ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);

        ejbRef.eliminarPorCedula(cedula,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "eliminarPorIdCliente")
    public void eliminarPorIdCliente(@WebParam(name = "id") int id,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario)  throws AtributoInvalidoException, ClienteValidadorException{
                ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
             ejbRef.eliminarPorId(id,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "eliminarCliente")
    public void eliminarCliente(@WebParam(name = "cliente") Cliente cliente,@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException {
                ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
                ejbRef.eliminar(cliente,nombreUsuario, contrasenaUsuario);
    }

    @WebMethod(operationName = "listarCliente")
    public List<Cliente> listarCliente(@WebParam(name = "nombreUsuario") String nombreUsuario,@WebParam(name = "contrasenaUsuario") String contrasenaUsuario) throws AtributoInvalidoException {
                ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
                return ejbRef.listar(nombreUsuario, contrasenaUsuario);
    }
}
